<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /**
         * 数组带回调函数的方法
         * 1. find: 查找数组中第一符合条件的元素，找到了返回该元素，没找到返回undefined
         * 2. findIndex：查找数组中第一个符合条件的元素的索引，找到返回索引，没找到返回 -1
         * 3. map：映射 
         * filter reduce forEach 
         * 
         */

        let users = [
            {
                id: 2,
                username: 'yuonly',
                password: '123123',
                money:2000
            },
            {
                id: 1,
                username: 'atguigu',
                password: '123123',
                money:3000
            },

            {
                id: 3,
                username: 'laozhang',
                password: '123123',
                money:3200
            }
        ]

        // 如何判断回调函数是同步还是异步的
        // 1. 按顺序输出回调就是同步的
        // 2. 不安顺序输出就是异步的
        // 定时器的回调是异步的回调，数组的回调都是同步的回调
        // 数组的回调都是window调用的，所以一般定义成箭头函数
        // 定时器回调一般也会定义成箭头函数
        // console.log(1111);
        // users.find((item)=>{
        //     console.log('arr this: ', this);
        //     console.log(222);
        // })
        // console.log(333);

        // console.log('timeout start')
        // setTimeout(()=>{
        //     console.log('定时器this',this);
        //     console.log('timeout')
        // },0);
        // console.log('timeout end');


        // let result = users.find(item => {
        //       //   item.username
        //     // 1     yuonly    false
        //     // 2     atguigu   true
        //     return item.username === 'atguigu';
        // })
        // console.log('result: ', result);

        // let index = users.findIndex(item=>{
        //     return item.username === 'atguigu';
        // })
        // if(index !== -1){
        //     console.log('找到了')
        // }



        // map
        // let arr = users.map(item=>{
        //     return item.money;
        // })
        // console.log(arr);

        // filter 过滤：
        // 应用场景：
        // filter的返回值一定是一个数组,如果没有符合条件的，返回值是一个空数组

        // var arr2 = users.filter(item=>{
        //     return false;
        // })
        // console.log(arr2);

        // let result = users.filter(item=>item.username === 'atguigu');
        // if(result.length){// 找到了，有叫atguigu的
        //     console.log(result, result[0]);
        // }

        // reduce 
        // 凡是涉及到累计的，就考虑使用reduce

        let total = users.reduce((pre,cur)=>{
            //    pre           cur    return
            // 1  第二个参数  {id:2}    值1
            // 2  值1
            //  
            return pre + cur.money;
        }, 0);
        console.log(total);
        
    </script>
</body>

</html>